package cn.tedu._03mybatis.mapper;

import cn.tedu._03mybatis.pojo.entity.Weibo;
import cn.tedu._03mybatis.pojo.vo.WeiboVO1;
import cn.tedu._03mybatis.pojo.vo.WeiboVO2;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * Mapper:由MyBatis为该接口创建对应的实现类,定义数据访问逻辑
 */
@Mapper
public interface WeiboMapper {
    /**
     * 1.在微博表中插入1条数据
      */
    //@Insert("INSERT INTO weibo(content,created,user_id) VALUES (#{content}, #{created}, #{userId})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.根据id删除微博
     */
    //@Delete("DELETE FROM weibo WHERE id=#{wid}")
    int deleteById(int wid);

    /**
     * 3.根据微博id修改微博相关信息
     */
    //@Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateById(Weibo weibo);

    /**
     * 4.全字段:根据微博id查询一条微博的信息[id,content,created,user_id]
     *   注意: 1.当字段名和实体类属性名不一致时,需要在查询时为该字段起别名
     *        2.全字段查询时,才可以将查询结果封装到实体类中
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{wid}")
    Weibo selectById(int wid);

    /**
     * 5.全字段:查询所有微博的信息[id,content,created,user_id]
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo")
    List<Weibo> selectAll();

    /**
     * 6.VO类示例1:根据微博id查询该条微博的 内容content和发布时间created
     *   6.1 创建VO类;
     *   6.2 定义接口方法及SQL;
     *   6.3 测试.
     */
    //@Select("SELECT content,created FROM weibo WHERE id=#{id}")
    WeiboVO1 selectByIdVO(int id);

    /**
     * 7.查询指定用户[用户id]发的所有微博信息[微博id,微博内容,发布时间]
     *   VO类名: WeiboVO2
     *   接口方法名: selectByUserIdVO
     */
    //@Select("SELECT id,content,created FROM weibo WHERE user_id=#{uid}")
    List<WeiboVO2> selectByUserIdVO(int uid);
}



















